package com.wxd.modules.sys.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.wxd.utils.Phone;
import com.wxd.validator.group.AddGroup;
import com.wxd.validator.group.UpdateGroup;
import lombok.Data;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;
import java.util.List;

/**
 * 系统用户
 *
 */
@Data//@Data 注解的主要作用是提高代码的简洁，使用这个注解可以省去代码中大量的get()、 set()、 toString()等方法；
@TableName("sys_user")
public class SysUserEntity implements Serializable {//实现序列化接口，可以进行序列化与反序列化
    private static final long serialVersionUID = 1L;//序列化ID等同于身份验证，主要用于程序的版本控制，维护不同版本的兼容性以及避免在程序版本升级时程序报告的错误。
    /**
     * 用户ID
     */
    @TableId(type = IdType.ID_WORKER)
    private Long userId;
    /**
     * 用户名
     */
    @NotBlank(message = "用户名不能为空",groups = {AddGroup.class, UpdateGroup.class})
    private String username;
    /**
     * 密码
     */
    @NotBlank(message = "密码不能为空",groups = {AddGroup.class})
    @JsonProperty(access = JsonProperty.Access.WRITE_ONLY)//禁止反序列化
    private String password;
    /**
     * 盐，salt是加盐操作，其目的是防止被拖库后，黑客轻易的
     * （通过密码库对比），就能拿到你的密码。
     */
    private String salt;
    /**
     * 邮箱
     */
    @NotBlank(message = "邮箱不能为空",groups = {AddGroup.class,UpdateGroup.class})
    @Email(message = "邮箱格式不正确",groups = {AddGroup.class, UpdateGroup.class})
    private String email;
    /**
     * 工作电话
     */
    //添加手机号校验注解
    @Phone
    private String mobile;

    /**
     * 状态  0：禁用   1：正常
     */
    private Integer status;
    /**
     * 角色Id列表
     */
    @TableField(exist = false)
    private List<Long> roleIdList;
    /**
     * 创建时间
     */
    private Date createTime;
    /**
     * 部门ID
     */
    @NotNull(message = "部门不能为空",groups = {AddGroup.class,UpdateGroup.class})
    public Long deptId;
    /**
     * 部门名称
     */
    @TableField(exist = false)//当前属性不是数据库的字段，但在项目中必须使用
    private String deptName;
}